package cn.xeblog.plugin.game.sudoku.enums;

import com.intellij.openapi.ui.ComboBox;
import java.awt.Color;
import java.awt.Dimension;
import java.util.Arrays;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 自定义面板主题
 *
 * @author ☆程序员鼓励师☆
 * @date 2022/8/25 19:05
 */
@Getter
@AllArgsConstructor
public enum Theme {
  /**
   * 黑暗主题
   */
  DARK("DARK", new Color(60, 63, 65), new Color(68, 72, 74), new Color(155, 152, 152), new Color(210, 208, 208),
      new Color(243, 208, 5), new Color(253, 106, 104)),
  /**
   * 淡色主题
   */
  LIGHT("LIGHT", new Color(242, 242, 242), new Color(242, 240, 219), new Color(64, 182, 224), new Color(17, 16, 16),
      new Color(238, 5, 207), new Color(227, 43, 61));
  /**
   * 名称
   */
  final String name;
  /**
   * 深色九宫格单元背景色
   */
  final Color backgroundColorUnit1;
  /**
   * 浅色九宫格单元背景色
   */
  final Color backgroundColorUnit2;
  /**
   * 谜题字体前景色
   */
  final Color puzzleForeground;
  /**
   * 解题字体前景色
   */
  final Color solutionForeground;
  /**
   * 实时提示提示颜色
   */
  final Color tipForegroundReal;
  /**
   * （点击提示）结果提示颜色
   */
  final Color tipForegroundResult;

  /**
   * 通过名称获取面板主题枚举
   *
   * @param name 名称
   * @return 面板主题枚举
   */
  public static Theme getTheme(String name) {
    return Arrays.stream(values()).filter(theme -> theme.getName().equals(name)).findFirst().orElse(Theme.DARK);
  }

  /**
   * 获取面板主题下拉列表项
   *
   * @param dimension 尺寸
   * @return 面板主题下拉列表项
   */
  public ComboBox<String> getComboBox(Dimension dimension) {
    ComboBox<String> comboBox = new ComboBox<>();
    comboBox.setPreferredSize(dimension);
    // 面板主题下拉列表项添加选项值
    Arrays.stream(Theme.values()).map(Theme::getName).forEach(comboBox::addItem);
    comboBox.setSelectedItem(this.getName());
    return comboBox;
  }
}
